#ifndef TABLAHASH_H_
#define TABLAHASH_H_

#include <vector>
#include "RegistroHash.h"
#include "BloqueHash.h"


class TablaHash {
private:
	std::vector<unsigned int> tabDispersion;

	// Duplica la tabla en forma posfija
	void duplicarTabla();

	// Se realiza la dispersion de la clave sobre una posicion de la tabla
	int dispersar(const RegistroHash& reg) const;

	// Nada de copiar la tabla
	TablaHash(const TablaHash&);
	TablaHash& operator=(const TablaHash&);

public:
	TablaHash();

	// Dado un registro devuelve la posición del bloque al que pertenece
	unsigned int getPosBloque(const RegistroHash& reg) const;

	// Señala a la tabla que el registro ocacionó overflow en el bloque
	// Se pasa la posicion del nuevo bloque
	void overflowBloque(const RegistroHash& regOver, const BloqueHash& bloque, unsigned int posNewBloque);

	int serializar(char* arrBytes);
	int desSerializar(char* arrBytes);
};

#endif /*TABLAHASH_H_*/
